package com.guomei.scheduler;

import com.guomei.service.curse.CourseOrderService;
import com.guomei.service.curse.UserCouponService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 定时任务执行类
 */
@Component
@Slf4j
public class TaskScheduler {
    @Resource
    private UserCouponService userCouponService;

    @Resource
    private CourseOrderService courseOrderService;

    /**
     * 每天凌晨2点执行：标记过期优惠券
     * cron表达式：秒 分 时 日 月 周 年(可选)
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void markExpiredCouponsTask() {
        log.info("开始执行标记过期优惠券任务...");
        try {
            userCouponService.markExpiredCoupons();
            log.info("标记过期优惠券任务执行完成");
        } catch (Exception e) {
            log.error("标记过期优惠券任务执行失败", e);
        }
    }

    /**
     * 每小时执行一次：自动取消过期未支付订单
     */
    @Scheduled(cron = "0 0 * * * ?")
    public void autoCancelExpiredOrdersTask() {
        log.info("开始执行自动取消过期订单任务...");
        try {
            courseOrderService.autoCancelExpiredOrders();
            log.info("自动取消过期订单任务执行完成");
        } catch (Exception e) {
            log.error("自动取消过期订单任务执行失败", e);
        }
    }

    /**
     * 可选：测试用的每30秒执行一次的任务
     */
    // @Scheduled(fixedRate = 30000)
    // public void testTask() {
    //     logger.info("测试定时任务执行...");
    // }
}
